// 示例 1:

// 输入: temperatures = [73, 74, 75, 71, 69, 72, 76, 73]
// 输出: [1, 1, 4, 2, 1, 1, 0, 0]
// 示例 2:

// 输入: temperatures = [30, 40, 50, 60]
// 输出: [1, 1, 1, 0]
// 示例 3:

// 输入: temperatures = [30, 60, 90]
// 输出: [1, 1, 0]

var dailyTemperatures = function (temperatures) {
    let stack = [] // 维护一个单调递增的栈，将访问过的元素的下标存入栈中
    let len = temperatures.length
    let result = new Array(len).fill(0)
    if (len <= 1) return result
    stack.push(0)

    for (let i = 1; i < len; i++) {
        if (temperatures[i] <= temperatures[stack[stack.length - 1]]) { // 当前遍历元素小于栈顶元素，存入栈中
            stack.push(i)
        } else {
            while (stack.length && temperatures[i] > temperatures[stack[stack.length - 1]]) { // 当前元素大于栈顶元素，说明找到了栈顶元素右边第一个比它大的元素
                let top = stack.pop() // 弹出栈顶元素
                result[top] = i - top // 计算这两个值之间的距离
            }
            stack.push(i) // 将当前值存入栈中，始终维护一个单调递增栈
        }
    }
    return result
};